#pragma once 

#include <iostream>
#include <fstream>
#include <string>

// 工具类
class Util
{
public:
    // 静态成员函数，无需创建对象即可调用类内函数
    static bool ReadFileContent(const std::string &filename, std::string *out) 
    {
        // 适合读取文本文件，不适合二进制流，图片为二进制流
        // std::ifstream in(filename);
        // if (!in.is_open())
        //     return false;

        // std::string line;
        // while (std::getline(in, line))
        // {
        //     *out += line;
        // }
        // in.close();

        // 以二进制的方式进行读取
        int filesize = FileSize(filename);
        if (filesize > 0)
        {
            std::ifstream in(filename);
            if (!in.is_open())
                return false;
            
            out->resize(filesize);
            in.read((char*)out->c_str(), filesize);
            in.close();
        }
        else
        {
            return false;
        }

        return true;
    }
    static bool ReadOneLine(std::string &bigstr, std::string *out, const std::string &sep)
    {
        auto pos = bigstr.find(sep);
        if (pos == std::string::npos)
            return false;
        
        *out = bigstr.substr(0, pos);
        bigstr.erase(0, pos + sep.size());
        return true;
    }
    static int FileSize(const std::string &filename) // 获取文件大小
    {
        std::ifstream in(filename, std::ios::binary); // 以二进制的方式打开文件
        if (!in.is_open())
            return -1;
        
        in.seekg(0, in.end); // 把文件指针移到末尾
        int filesize = in.tellg(); // 读取指针位置
        in.seekg(0, in.beg); // 把文件指针移到开头
        in.close();
        return filesize;
    }
};